"""
说明: 当属性和方法只需要在类定义内部使用时, 类的外面不能直接使用，就可以使用私有属性和私有方法
特点: 在类定义外部,  无论是通过类对象还是实例对象均无法获取私有属性和调用私有方法
注意： 在继承关系中, 父类中的私有属性和私有方法, 子类同样无法获取和调用

定义格式：
私有属性: __属性名
私有方法: def __方法名():

1. 只能在定义所在的类里面，才能直接访问私有权限和私有方法：
    - cls.__属性名/cls.__方法名()/self.__属性名/self.__方法名()
2. 定义公有普通方法，间接访问私有属性和私有方法
"""

"""
类名：Girl
实例属性：
    姓名 name
    私有的实例属性__age
实例方法：
    私有的方法 __ask_age
"""


class Girl(object):
    def __init__(self, name, age):
        self.name = name  # 公有
        self.__age = age  # 私有

    def __ask_age(self):    # 私有
        print(f'年龄为 {self.__age}')

    # 通过公有方法，间接访问私有属性和方法
    def use_private(self):
        # 对象.属性，对象.方法
        print('age = ', self.__age)
        self.__ask_age()

# 1. 实例化对象，自动调用__init__
g = Girl('小红', 18)
# 2. 访问属性
print(g.name)
# AttributeError: 'Girl' object has no attribute '__age'
# 类的外面，不能直接使用私有属性
# print(g.__age)
# 'Girl' object has no attribute '__ask_age'
# g.__ask_age()
g.use_private()